package com.cty.advice;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.aop.MethodBeforeAdvice;

import java.lang.reflect.Method;

/**
 * @Auther: cty
 * @Date: 2020/3/7 16:58
 * @Description:  通知类
 * @version: 1.0
 */
public class MyAdvice {
    // 获取日志对象
    Logger log = Logger.getLogger(MyAdvice.class);

    // 无参前置通知
    public void myBefore(){
        log.debug("前置通知-AspectJ");
    }

    // 单参前置通知
    public void myBefore2(String name1){
        log.debug("前置通知2-AspectJ："+name1);
    }

    // 多参前置通知
    public void myBefore3(String name,int age){
        log.debug("前置通知3-AspectJ："+name+" "+age);
    }

    // 无参后置通知（无异常时执行）
    public void myAftering(){
        log.debug("后置通知ing-AspectJ");
    }

    // 无参后置通知（有无异常都执行）
    public void myAfter(){
        log.debug("后置通知-AspectJ");
    }

    // 单参后置通知（有无异常都执行）
    public void myAfter2(String name1){
        log.debug("后置通知2-AspectJ："+name1);
    }

    // 多参后置通知（有无异常都执行）   ? 如何获取返回对象？？？
    public void myAfter3(String name, int age){
        log.debug("后置通知3-AspectJ："+name+" "+age);
    }

    public void myThrows(Exception ex){
        log.debug("异常通知-AspectJ 异常信息为："+ex.getMessage());
    }

    public Object myAround(ProceedingJoinPoint p) throws Throwable{
        log.debug("前置环绕通知-AspectJ");
        Object result = p.proceed();
        log.debug("后置环绕通知-AspectJ");

        return result;
    }
}
